XML

Дата актуализации: 07/05/25
Материал подготовлен: Рахманин Станислав
#xml

Что такое XML

XML означает eXtensible Markup Language, что переводится с английского языка как «расширяемый язык разметки». Это текстовый документ со специальными комментариями для маркировки данных. С помощью разметки удобно использовать файл, не затрагивая его содержимое.
В современном мире документы встречаются не только в бумажном виде, но и электронном. Для удобства часто используют один формат — XML.

Сочетание простого формального синтаксиса, удобства для человека, расширяемости, а также базирование на кодировках Юникод для представления содержания документов привело к широкому использованию как, собственно, XML, так и множества производных специализированных языков на базе XML в самых разнообразных программных средствах.

Однако это мало что говорит человеку, далёкому от ИТ. Давайте разберёмся, что же такое, XML.

XML — популярный формат для обмена данными между различными системами и приложениями. Данные в нём хранятся в текстовом виде, что даёт возможность читать их, как компьютеру, так и человеку. К тому же, они хранятся в структурированном виде, вся информация идёт с пометкой, к чему эта информация относится.

Представьте, что вы собираете информацию, которая должна быть понятна не только вам, но и другим людям или программам. Например, список книг, рецепт блюда или медицинскую карту. XML — это как система «умных ярлыков», которая превращает беспорядочные записи в упорядоченную структуру.

Файл формата XML представляет собой текстовый файл, составленный по определённым правилам и служащий для передачи информации. Его можно открыть любым текстовым редактором и не только. Некоторые программы, такие, как MS Word, Блокнот, Notepad++, открывают его, как чистый текст, другие же (например, MS Excel) умеют считывать структуру и представлять данные в уже более упорядоченном виде. Это делает его очень удобным и универсальным. XML работает везде: Windows, macOS, Linux, смартфоны. Это как универсальный язык, который понимают все системы.

Структура и синтаксис XML файла

Итак, как же выглядит изнутри файл формата XML?

Если вы когда-нибудь видели карточки в библиотечном каталоге, то XML работает похоже. Каждая карточка содержит:
  • Название книги
  • Автора
  • Год издания
  • Жанр

В XML это выглядело бы так:
<книга>  
  <название>Маленький принц</название>  
  <автор>Антуан де Сент-Экзюпери</автор>  
  <год>1943</год>  
  <жанр>Философская сказка</жанр>  
</книга>  
Давайте на этом примере разберём, как в XML записана информация.
Вся информация внутри файла находится между тегами (от англ. tag — метка). Тег обозначается угловыми скобками.
Как вы могли заметить, теги идут парами, первый в паре называется открывающий тег, а второй закрывающий тег, имя закрывающего тега должно быть таким же, как и имя открывающего, но с символом “/” в начале.
В нашем примере есть открывающие теги: <книга>, <название>, <год>, <автор>, <жанр>, и соответствующие им закрывающие — </название>, </автор>, </год>, </жанр>, </книга>.

То, что находится между тегами называется элементом.
Теги дают возможность, как человеку, так и машине, понять, что же за информация находится между тегами. С помощью тегов мы показываем системе «вот тут начинается элемент, а вот тут заканчивается».

Это как дорожные знаки:
— На въезде в город написано его название: Москва
— На выезде написано то же самое название, но перечеркнутое: Москва

Основной принцип структуры XML – вложенность, за счёт чего она напоминает матрёшку. При создании XML есть определённые правила построения, которые называются синтаксисом. В XML всегда должен быть только один корневой элемент, а все остальные элементы должны находится внутри него.

Запись ниже будет неверной, так как содержит два корневых элемента:
<книга>
  <название>Маленький принц</название>
</книга>
<книга>
  <название>Война и мир</название>
</книга>
Также теги не должны пересекаться. Принцип примерно такой же, как и со скобками в математических операциях. Теги, как и скобки, должны закрываться от последнего открытого, к первому.

Запись ниже неверная, так как теги <название> и <автор> пересекаются:
<книга>
  <название>Маленький принц <автор>
  Антуан де Сент-Экзюпери </название> </автор>
  <год>1943</год>
  <жанр>Философская сказка</жанр>
</книга>
Так же к элементу можно добавить атрибут. Это как уточнение, заметка на полях. Атрибут пишется в открывающем теге через пробел после его имени.
Сначала пишется его имя, затем знак “=” и содержание атрибута.
Значение атрибута всегда указывается в кавычках.

Например:
<мои_фильмы>
  <фильм рейтинг="5">
    <название>Крёстный отец</название>
    <год>1972</год>
    <жанр>Криминал</жанр>
  </фильм>
  <фильм рейтинг="4">
    <название>Форрест Гамп</название>
    <год>1994</год>
  </фильм>
</мои_фильмы>
В этом примере «рейтинг» является атрибутом. Атрибуты подходят для кратких уточнений (дата, цвет, статус, рейтинг). Имена тегов и атрибутов всегда должны записываться в одно слово. Если нужно записать несколько слов, то можно использовать символы, например, «_», «.» или «–».

Правильно:
<книга>
  <название_книги>Маленький принц</название_книги>
</книга>
Неправильно:
<книга>
  <название книги>Маленький принц</название книги>
</книга>
В первой строке XML обычно указывается XML пролог. Это необязательная строчка, содержащая служебную информацию. Версия XML, кодировка файла и пр. Она даёт компьютеру понимание того, как читать этот файл.

Пример:
<?xml version="1.0" encoding="UTF-8"?>
Ещё в файлах XML можно встретить комментарии. Это текст, указанный в специальном теге: <!-- -->

Например:
<!-- Это список моих книг -->
<книга>
  <название>Гарри Поттер</название>
</книга>
Такие комментарии не читаются машиной, пишутся для людей и могут содержать любую информацию, которую создатель XML посчитает нужным донести. Это делается, например, для того чтобы человек, не знающий структуру этого конкретного XML файла, мог по комментариям понять, какой тег и атрибут за что отвечает.

Ещё немного о синтаксисе.

Весь текст, включая имена тегов и атрибутов, может быть записан, как латиницей, так и кириллицей. Однако, некоторые программы не умеют читать файлы с кириллицей, или же им для этого нужно указывать кодировку в XML-прологе. Поэтому иногда чтение XML файла с кириллицей может приводить к ошибкам.

Существуют и другие правила именования тегов и атрибутов.
Первым символом может быть только буква или символ «_». Далее можно использовать любые символы, кроме «<», «>», «&». Эти символы являются служебными и их нельзя использовать, ни в тексте, ни в именах.

В примерах вы могли заметить отступы в структуре файла. Это не обязательно и обычно делается для удобства чтения человеком, программа же может считать XML документ одной строкой.

Все имена атрибутов и текст являются регистрозависимыми, то есть заглавные и строчные буквы различаются. Тег <книга> и <Книга> — это два разных тега и закрывать их должны соответственно </книга> и </Книга>

XML схемы

Мы поговорили об общих правилах формирования XML. Однако для того, чтобы использовать XML для передачи информации, нужно определить структуру нашей конкретной реализации.
XML можно представить, как анкету или бланк. Все мы сталкивались с ними много раз, особенно в гос.учреждениях, и понимаем, что для каждой организации и каждой цели, есть своя форма, которую нужно заполнить.
Если мы хотим подать заявление на получение загран.паспорта, то нам нужно заполнить соответствующую анкету, где будут определённые поля и в этих полях от нас будут ждать определённую информацию, такую как пол, дата рождения, паспортные данные и прочие данные, которые нужны для выдачи документа.
Так и с XML нужно определить, какую информацию мы хотим получить, каким образом её внести в XML, и как потом её считывать.
Например:
  • Использовать ли атрибуты, или пользоваться только тегами?
  • Или может, наоборот, только атрибутами?
  • Как будут называться наши атрибуты и теги?
  • Какую информацию можно в них записывать.
  • Сколько их может или должно быть?
  • Какая должна быть структура вложенности?
Всё это необходимо для корректного формирования и чтения XML, называется XML схемой и записывается обычно в файле XSD (XML Schema Definition), который, кстати, тоже является файлом XML.
Такие схемы могут разрабатываться на самом разном уровне.
Это могут быть и международные стандарты от ISO (International Organization for Standardization), например стандарт XML схемы для описания и передачи географических данных, который используется в NASA, Google Earth, Яндекс.Картах.
Это могут быть более локальные по области применения схемы, например XML схемы от Минстроя РФ.
И ничто не мешает двум организациям, или даже двум людям, договориться о своей схеме передачи данных и использовать её между собой.
Отдельно стоит заметить, что файл XML не обязательно будет именно такое же расширение .xml.
Файлом XML будет являться любой файл, соответствующей спецификации XML. Это и XSD-схема, и HTML-документ, и файлы экспертизы с расширением .gge.

Особенности чтения файла XML

Поговорим о том, что нам делать если нам нужно передать информацию в формате XML.
Несмотря на то, что файл XML можно открыть и написать самому хоть в Блокноте, подразумевается, что создаваться и читаться он будет программой. Однако, бывают случаи, когда нам приходится вручную его редактировать и для этого будет полезно понимать, как файл будет впоследствии читаться программой.

Обычно, если программа принимает данные из файла XML, а не просто открывает его для просмотра и редактирования, то она ждёт от файла определённую информацию, соответствующую схеме.
Ей нужны заранее определённые теги и атрибуты из которых она будет считывать информацию. Поэтому при передаче информации в программу, имена тегов и атрибутов должны быть такими, которые предусмотрены XML схемой.

Можно продолжить наше сравнение XML с анкетой. В анкете есть определённые поля, в которые нужно вносить соответствующую информацию, и когда вы отдаёте эту анкету, тот, кто будет заносить из неё данные, также будет ожидать, что поля будут заполнены должным образом.
В графе «пол» он ожидает увидеть «мужской» или «женский», как вариант: «м.», «ж.», «жен.», «муж.».
Если там будет указан «паркетный», то анкета, по сути, будет испорчена.
И если человек сможет считать значение графы «возраст», записанное, почти любым способом, будь то «21», «двадцать один» и даже «дваццат адин».
В свою очередь компьютер так не сумеет. Он будет считывать каждый символ по очереди.

Для него записи «Смета», «смета», «смета », « смета» будут отличаться, это будут 4 разных значения.
Более того, даже «cмета» и «смета» будут отличаться. А всё потому, что в первом случае буква «с» латинская. Да, они выглядят совершенно одинаково, но для компьютера это два разных символа.

Какие требования могут предъявляться к файлу XML прописываются в файле XSD:

  • Какие элементы и атрибуты должны быть
Например, в XML-заказе обязательно должны быть
<адрес_доставки> и <товары>.

  • Порядок элементов
Например, сначала должен идти <имя_клиента>, потом <телефон>.

  • Вложенность элементов
Например, <товар> должен находиться внутри <склад>, а не наоборот.

  • Обязательность элементов и атрибутов, и их количество
Например, <телефон> должен встречаться от 1 до 3 раз

  • Ограничения значений
Диапазон чисел, фиксированные значения, соответствие шаблону

  • Уникальность данных
Можно требовать, чтобы значения были уникальными (например, артикул товара)

Итог

Формат XML получил широкое распространение благодаря своей простоте, универсальности, возможности чтения человеком. В этом формате могут хранить настройки программы, с его помощью могут обмениваться информацией устройства, его можно использовать для хранения и передачи документов, и даже внутри файлов docx и xlsx есть XML, в котором, например, хранится информация о стилях.
Встречая его повсюду, мы даже не замечаем этого. Однако, если нам всё-таки пришлось с ним столкнуться и передать с его помощью информацию, нужно всегда помнить, как о правилах синтаксиса XML, так и о том, что конкретные правила формирования файла XML описываются в файле схемы XSD.

Дополнительные материалы

XML формат не новый, широко распространённый и обладающий большим количеством нюансов. Если вы хотите лучше понимать XML и узнать о других сферах его применения, то ниже будут статьи, которые вам в этом помогут: